FPGA笔记之verilog语言(基础语法篇)

您所在的位置:网站首页 supreme loading是什么意思 FPGA笔记之verilog语言(基础语法篇)

FPGA笔记之verilog语言(基础语法篇)

2023-11-25 09:18| 来源: 网络整理| 查看: 265

文章目录 FPGA笔记之verilog语言(基础语法篇)1. verilog 的基础结构1.1 verilog设计的基本单元——module1.2 module的使用1.3 I/O的说明1.3 内部信号的声明1.4 模块功能的实现1.5 第一章学习笔记 2. verilog 的数据类型2.1 整数型2.1.1 数制2.1.2 负数2.1.3 X和Z 2.2 实数型和字符型2.2.1 实数 3. verilog 的变量类型4. verilog 的运算符5. verilog 的语句块

FPGA笔记之verilog语言(基础语法篇)

写在前面: verilogHDL语言是面向硬件的语言,换句话说,就是用语言的形式来描述硬件线路。因此与C语言等软件语言不同,如果想要在实际的电路中实现,那么在进行verilog语言编写时,就需要提前有个硬件电路的构思和想法,同时,在编写verilog语言时,应该采用可综合的语句和结构。

1. verilog 的基础结构 1.1 verilog设计的基本单元——module

在数字电路中,我们常常把一些复杂的电路或者具有特定功能的电路封装起来作为一个模块使用。以后在运用这种模块化的封装时,我们只需要知道:1.模块的输入是什么;2.模块的输出是什么;3.什么样的输入对应什么样的输出。而中间输入是经过什么样的电路转化为输出就不是我们在使用时需要特别重视的问题。当很多个这样的模块相互组合,就能构成一个系统,解决一些复杂的问题。verilog语言的基础结构就是基于这种思想。verilog中最基本的模块是module,就可以看做是一个封装好的模块,我们用verilog来写很多个基本模块,然后再用verilog描述多个模块之间的接线方式等,将多个模块组合得到一个系统。 那么一个module应该具有哪些要素呢?首先对于一个module,我们应该设计好其各个I/O,以及每个I/O的性质,用于与模块外部的信号相联系,让使用者知道如何连线。其次,作为开发者,我们需要自己设计模块内部的线路来实现所需要的功能。因此需要对模块内部出现的变量进行声明,同时通过语句、代码块等实现模块的功能。综上所述,我们把一个module分成以下五个部分:

模块名端口定义I/O说明内部信号的声明模块功能实现 例: / //module 模块名 (端口1,端口2,端口3); //I/O说明 //内部信号说明 //模块功能实现 //endmodule //module 模块名 (端口1,端口2,端口3); module FreDevider ( Clock, rst, Clkout ); //I/O说明 input Clock; input rst; output Clkout; //内部信号说明 reg Clkout; //模块功能实现 always@(posedge Clock or posedge rst) begin if(rst) Clkout>2))+8'b0000000000000001); x3=((~(x_complement>>2))+8'b0000000000000001); x2=((~(x_complement>>2))+8'b0000000000000001); x1=((~((x_complement>>2)+lx))+8'b0000000000000001);

这里就是根据最高位是1和0来决定进行什么样的数据处理。总而言之,我们要明白,数据在硬件中的储存是默认为正整数的二进制储存方式,但是如何取理解这个数,却是使用这个数据的人自己规定的。这种思想不仅在处理负数时是这样的,在碰到小数、字符等都是这么一个思想。0和1的世界是死的,但是解读他们的规则却是活的。

2.1.3 X和Z

我们都知道0和1代表的含义,但是对于verilog语言来说,还有X和Z两种独立于0和1之外的状态。这两种状态分别是未知态和高阻态。 未知态X是指,无法确定此时信号的状态是1还是0,但是能确定信号是有状态的,不是1就是0,且这个状态是能够影响到与其相连的后续电路的,当我们用电表测量时,其值可能是1,可能是0,取决于被测当时硬件电路的当前状态。而高阻态Z是指,当前的信号状态既不是1,也不是0,而是没有状态,或者可以认为是断开,即此时信号的状态已经无法再影响到后续的电路。 而在实际电路中,某一时刻时只有1、0、高阻态三种状态。 尽管X和Z表示的状态不是传统的1和0,但是X和Z也能参与到二进制的逻辑运算中来。在逻辑运算中,X和Z满足如下的规律:

0 && X = 0 ; 1 && X = X ; 0 || X = X ; 1 || X = 1 ; 0 && Z = 0 ; 1 && Z = X ; 0 || Z = X ; 1 || Z = 1 ; 2.2 实数型和字符型

实数型和字符型放在一起,因为这两种数据的表达有相似的地方。那就是实数型或者字符型的数据可以在verilog语言中出现,但是却不能通过硬件表达出来。而是常常出现在命令、显示等非硬件参与的操作中。这与上面的整数的表达方式和意义是不同的。

2.2.1 实数

实数可以用十进制来表示,也可以用科学计数法来表示,例如:

12 //表示12 23e-3 //表示0.0023 23E4 //表示230000

虽然我们可以在verilog中写出这些数据,但是并不是所有我们写出来的数据都能在硬件中表达。在实际的仿真过程中,所有的科学计数的表达例如23e-3或者23E4,在硬件中都是0,而硬件中也不能直接表达小数。也就是直接在verilog中写出来的小数,会被硬件识别为0。 但是小数或者指数的表达,可以通过使用者自己规定来获得。例如我们常听说的浮点数等,就是通过一些算法转换,来将二进制的代码表达成带有小数或者指数的数字。

3. verilog 的变量类型 4. verilog 的运算符 5. verilog 的语句块


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3